Faster Quantized Inference with XNNPACK — The TensorFlow Blog
Floatだけでなく、quantizedでのパフォーマンスを向上
今まではfloat - XNNPack, quant - QNNPackだったけど、quantについてもXNNPackがQNNPackよりも速くなっている
symmetric, per-tensor, per-channel
遅いけどasymも対応
以前のquantizeと比べて
1 threadsでは
androidで30%以上
desktop x86で5倍以上
AVXをサポートしない古いデバイスでは30倍以上速い
以前のtfliteはAVXのサポートしかしてなかったので、今回
1 thread wasm v8
xeon
core i7
celeron
pixel 3a
pixel 4a
10倍、20倍以上速くなった
default TensorFlow Lite implementationと比べて
SIMDでないtfliteのwasmビルドということ?
逆に、iOSでもサポートされたら10-30倍早くなるということか?
QNNPackとの比較
indirect deconvolution algorithmとかnumpy like broadcasting in quantized add, mulなどを追加
dequantizationが速くなった
GEMMLOWPのdequantスキーマ(QNNPackが継承)は精度と性能が悪いので、置き換えた
symmetricに特化
QNNPackはasymm
-127 - 127でzero point = 0とする
zero pointの計算不要、accumulateするときにbiasとfuseできる
-127 ~ 127 のproductは15bitに収まるので、32bitでなく16bitで行える
SIMDのサポートを拡張
QNNPackはNEON on arm, SSE2 on x86
XNNPackはSSE2, SSE4.1, AVX, XOP, AVX2, AVX512 on x86, NEON, NEON v8, NEON dot product instructions on ARM, WebAssembly SIMDに対応 Additionally, XNNPACK provides scalar implementations for WebAssembly 1.0 and pre-NEON ARM processors.
XNNPackはon-the-flyで最適なマイクロカーネルを使う
推論のスレッドがbig core -> little coreに移動すると、自動的に適応
QNNPackではハイエンドorローエンドでマイクロカーネルをつくっていた
シングルスレッドでのオーバーヘッドを減らし、かつマルチスレッドでは並列度を上げるようにしている
TensoFlow Lite デフォルトで有効